/*
 * Copyright 2012-2020 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.boot.rsocket.server;

import java.net.InetAddress;

import org.springframework.boot.web.server.Ssl;
import org.springframework.boot.web.server.SslStoreProvider;
import org.springframework.util.unit.DataSize;

/**
 * 一个可配置的 {@link RSocketServerFactory}。
 *
 * 提供设置端口、地址、传输协议、SSL 等功能，用于创建 RSocket 服务器实例。
 *
 * @author Brian Clozel
 * @since 2.2.0
 */
public interface ConfigurableRSocketServerFactory {

	/**
	 * 设置服务器监听的端口。如果未指定，则默认使用端口 9898。
	 * @param port 要设置的端口
	 */
	void setPort(int port);

	/**
	 * 指定最大传输单元（MTU）。大于指定 {@code fragmentSize} 的帧将被分片传输。
	 * @param fragmentSize 分片大小
	 * @since 2.4.0
	 */
	void setFragmentSize(DataSize fragmentSize);

	/**
	 * 设置服务器应绑定的特定网络地址。
	 * @param address 要绑定的地址（默认为 {@code null}）
	 */
	void setAddress(InetAddress address);

	/**
	 * 设置 RSocket 服务器应使用的传输协议。
	 * @param transport 要使用的传输协议
	 */
	void setTransport(RSocketServer.Transport transport);

	/**
	 * 设置将应用于服务器默认连接器的 SSL 配置。
	 * @param ssl SSL 配置
	 */
	void setSsl(Ssl ssl);

	/**
	 * 设置用于获取 SSL 密钥库和信任库的提供者。
	 * @param sslStoreProvider SSL 密钥存储提供者
	 */
	void setSslStoreProvider(SslStoreProvider sslStoreProvider);

}
